首先我們先看一個範例
function fn(para){
console.log(para, arguments);
};
fn('weiwei', 2, 3);
範例中我們設立一個參數 para
,當我們傳入三個參數時,
只會接收到第一個傳入的參數 weiwei
,
而 arguments
會將傳入的參數全部接收,
會形成一個 arguments
的類陣列,
我們將內容點開後,能發現它的結構跟陣列很像
當我們在函式中宣告一個變數名稱和參數名稱相同時會如何呢?
function fn(a){
console.log(a);
var a;
console.log(a);
a = 'weiwei';
console.log(a);
};
fn('ming');
我們能看見參數 a
只有最後一個回傳 weiwei
,
在函式中我們宣告的變數名稱和參數一樣時,
因為變數 a
已經存在,因此 var a
會無效,所以第二個 a
會回傳 ming
,
而第三個 a
的結果為 weiwei
的原因是因為在 a = 'weiwei'
時,
a
的值已經被修改成 weiwei
了,
因此結果才會回傳 weiwei
當我們在函式中宣告一個函式名稱和參數名稱相同時會如何呢?
function fn(a){
console.log(a);
function a() {};
console.log(a);
a = 'weiwei';
console.log(a);
};
fn('ming');
此時前兩個 a
為 function
,第三個為 weiwei
,
這表示 a()
會因提升(hoisting)效果跑到最前端,
因此可以得知在函式中的 a()
執行時,會在參數傳入之後才進行,
function callMe(d, c, b, a) {
console.log(d, c, b, a);
};
callMe('a', 'b', 'c');
該範例可以了解到參數的名稱可以自己定義,
而參數的名稱與傳入的值沒有任何關係
callback function 是將函式當成參數給另一個函式使用
function fnA(name, a) {
console.log(`${name}你好${a}`);
};
function fnB(fn) {
fn('weiwei', '阿');
};
fnB(fnA);
在執行 fnB(fnA)
時,我們會先將 fnA
的參數設定在 fnB
函式內,
而此時 fnA
這個函式會在 fnB
中執行